// ChatMessage.java
package com.ruoyi.chatAi.domain;

import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.beans.factory.annotation.Value;

import java.util.ArrayList;
import java.util.List;

/**
 * 聊天消息对象
 *
 * @author ruoyi
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class ChatMessage extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /** 消息ID */
    private Long messageId;

    /** 会话ID */
    @Excel(name = "会话ID")
    private String sessionId;

    /** 用户ID */
    @Excel(name = "用户ID")
    private Long userId;

    /** 消息角色（user用户 assistant助手 system系统） */
    @Excel(name = "消息角色", readConverterExp = "user=用户,assistant=助手,system=系统")
    private String role;

    /** 消息内容 */
    private String content;

    /** 消息token数 */
    @Excel(name = "Token数")
    private Integer tokens;
    
    /** 是否为文件消息 */
    private Boolean isFileMessage;

    /** 上传的文件列表 */
    private List<FileInfo> files;

    /** 删除标志（0代表存在 2代表删除） */
    private String delFlag;

    /** 构造函数 */
    public ChatMessage() {
        this.delFlag = "0";
        this.isFileMessage = false;
        this.files = new ArrayList<>();
    }
    
    /**
     * 文件信息内部类
     */
    @Data
    public static class FileInfo {
        /** 文件名称 */
        private String name;
        
        /** 文件类型 */
        private String type;
        
        /** 文件大小 */
        private Long size;
        
        /** 文件URL */
        private String url;

        /** 文件path */
        private String path;
        
        /** 新文件名称 */
        private String newFileName;
        
        /** 原始文件名称 */
        private String originalFilename;


        @Value("${ruoyi.profile}")
        private String fileBaseDir;

        /**
         * 获取完整的文件路径
         * @return 完整的文件路径
         */
        /**
         * 获取完整的文件路径
         * @param url 文件URL路径
         * @return 完整的文件路径
         */
        public String getFullFilePath(String url) {
            if (url == null || url.isEmpty()) {
                return null;
            }

            // 如果url以/profile开头，需要替换为实际路径
            if (url.startsWith("/profile")) {
                // 移除"/profile"前缀
                String relativePath = url.substring("/profile".length());
                // 确保路径分隔符的一致性
                relativePath = relativePath.replace("/", java.io.File.separator);
                // 组合为完整路径
                return fileBaseDir + relativePath;
            }

            return url;
        }
    }
}